Abstraction: Dans l'unité centrale

Durée estimée: 45 minutes

L'abstraction matérielle et logicielle

L'abstraction est un des concepts majeurs en informatique. On peut envisager l'histoire du progrés de l'informatique comme celle du progrès de l'abstraction du bas niveau vers le haut niveau.

Le langage utilisé par App Inventor est un bon exemple d'abstraction de très haut niveau. Prenons le cas du composant Caméra : App Inventor vous permet de prendre une photo avec un seul bloc : Caméra.PrendrePhoto. Pourtant, imaginez toutes les opérations de plus bas niveau que cette photo nécessite : la mise au point, la convergence de la lumière sur les pixels, la conversion en bits, puis en fichier image dans la mémoire. Le bloc Caméra.PrendrePhoto encapsule toutes ces oéprations complexes dans un seul bloc.

Avant le logiciel

Pour nous aider à percevoir cette marche de l'abstraction vers le haut niveau, revenons aux premiers jours de l'informatique, avant l'ère du "logiciel", lorsque l'informatique était une affaire d'instructions et de données que l'on rentrait à la main dans l'ordinateur, pour ensuite appuyer sur le bouton "run" en espérant que ça allait marcher. Il n'y avait pas de système d'exploitation ni d'éditeur de blocs. Ce type d'abstraction est arrivé bien plus tard.

Aux premiers jours de l'informatique, avant l'arrivée du logiciel, presque tous les programmeurs étaient des femmes. Ce sont elles qui ont écrit les premiers programmes sur l' ENIAC, premier ordinateur numérique. Mais cette partie de l'histoire de la programmation n'a été racontée que récemment. Regardez cette vidéo, puis discutez avec vos partenaires pour déterminer si les progammeurs de l'époque faisaient appel aux mêmes compétences ou à des compétences différentes par rapport à celles que vous apprenez ici.

Vidéo sur l'ENIAC - Créée avec Studio G for Google I/O par Kathy Kleiman sur Vimeo.

Women programming ENIAC

Simulateur d'un ordinateur à 4 bits

L'ENIAC pesait 30 tonnes. Mais avec les composants disponibles à l'époque, il ne pouvait enregistrer que 20 nombres de 10 digits dans ses accumulateurs ou ses registres mémoire. Les programmes étaient écrits sur papier pour mettre au point l'algorithme. Ensuite il fallait souvent des jours pour entrer le programme dans la machine avec des boutons et des cables.

Gen 0 4-bit

Notre simulateur d'ordinateur à 4 bits n'a que 16 emplacements mémoire à 8 bits, il est donc un peu plus petit que l'ENIAC, mais pas tellement, et comme l'ENIAC, il n'a pas ou peu de logiciel. Donc vous allez vous rendre compte de ce à quoi ressemblait la programmation avant d'avoir les langages de haut niveau et nos environnements de programmation sophistiqués. Il est également important de se rendre compte que le simulateur sur 4 bits est un modèle précis de la manière dont fonctionnent les ordinateurs d'aujourd'hui. Pour exécuter les programmes que vous écrivez avec App Inventor, l'ordinateur doit traduire votre programme en langage machine pour qu'ils soient exécutables par l'unité centrale (CPU).

Les vidéos et exercices qui suivent présentent le simulateur d'ordinateur à 4 bits.

  • Génération 0: Programmation directe de la machine.
    Comme le faisaient celles qui programmaient l'ENIAC, le programme en langage machine est entré directement dans la mémoire de l'ordinateur.
  • Génération 1: Utilisation d'un éditeur et d'un outil de chargement.
    Notre première abstraction logicielle sera consituée par un éditeur qui permet de taper les instructions, et par un lecteur qui va charger les instructions en mémoire.
  • Génération 2 : utilisation du langage assembleur.
    L'assembleur qui est un langage, remplace l'utilisation des 0 et des 1 par des instructions symboliques qui correspondent à un niveau plus élevé d'abstraction des instructions et des données.

Génération 0: La machine à l'état brut

La vidéo qui suit présente l'ordinateur à 4 bits. La meilleure façon de la suivre est probablement d'ouvrir le simulateur lui même dans une fenêtre séparée et de faire des pause dans la vidéo pour expérimenter en même temps avec le simulateur lui même. Voici un lien au simulateur qui s'ouvrira dans une fenêtre séparée.

Auto-contrôle

Not yet started
1 point

Qu'est-ce que 0011 ?

Dans l'ordinateur à 4 bits nous pouvons voir plusieurs occurrences de cette chaine : 0011. que représente t-elle ?

Cochez toutes les réponses valides.

Not yet started
1 point

Quel est le bon algorithme ?

Un programme qui ajoute 1 et 2 et fournit la somme 3 en sortie, a été préchargé dans un ordinateur à 4 bits de génération 0. La valeur décimale 1 est stockée à l'emplacement 1000, et la valeur 2 à l'emplacement 1001.

Lequel de ces algorithmes, sous forme de pseudo-code, décrit-il correctement l'algorithme en langage machine ?
Not yet started
1 point

Quelle est la sortie ?

Notre ordinateur à 4 bits utilise des octets de 8 bits pour représenter les données. Un octet de 8 bits peut représenter des valeurs comprises entre 0 et 255 -- i.e., 00000000 à 11111111.
Que se passerait-il à votre avis si vous ajoutez 1 à 11111111 ?

Pour répondre à cette question, vous pouvez vous appuyer sur le simulateur en écrivant un petit programme en langage machine pour voir ce qui se passe. Par défaut, le programme chargé dans l'ordinateur à 4 bits ajoute les valeurs présentes dans les emplacements 1000 and 1001 et imprime la somme. Alors voila comment vous pouvez programmer la machine pour ajouter 11111111 and 00000001:
  • mettez la valeur 11111111 (ou 255 en décimal) dans l'emplacement mémoire 1000.
  • mettez la valeur 00000001 (ou 1 en décimal) dans l'emplacement mémoire 1001.
  • Lancez (Run) le programme et regardez la sortie.

Quelle valeur décimale obtenez vous quand vous ajoutez le nombre 1 en binaire au nombre 11111111 en binaire ?

Génération 1: La programmation en langage machine

En génération 1 l'ordinateur sur 4 bits comprend un logiciel système, qui ferait maintenant partie du système d'exploitation. Ce logiciel comprend un éditeur, qui vous permet d'écrire un programme en langage machine, et un chargeur (loader) qui vous permet de charger le programme dans la mémoire de la machine.

C'est le premier pas vers une abstraction de plus haut niveau. Au lieu d'entrer les valeurs directement dans la mémoire de la machine, nous tapons notre programme avec l'éditeur, et le chargeur fait le nécessaire pour le mettre dans la mémoire de la machine.

La vidéo qui suit vous montre comment ça marche.

Auto-contrôle

Not yet started
1 point

Quelle est la sortie ?

Comme vous l'avec vu dans la vidéo, l'éditeur sur 4 bits implique que vous organisiez votre programme de la manière suivante :

    Instructions d'initialisation des données
    Instructions en langage machine
    

Avec l'éditeur, tapez le programme en langage machine, qui suit -- uniquement la partie avec des 0 et des 1, et pas les commentaires en pseudocode, qui commencent avec --.

    1000:00001111  -- Initialiser les emplacements mémoire 1000 à 00001111 
    1001:00001000  -- Initialiser l'emplacement mémoire  1001 à 00001000 
    00011000 -- Charger dans ACC la valeur de l'emplacement mémoire 1000
    01011001 -- Multiplier ACC par la valeur à l'emplacement mémoire 1001
    00101010 -- Enregistrer la valeur dl'ACC à l'emplacement mémoire 1010
    10001010 -- Imprimer la valur de l'emplacement mémoire 1010
    00000000 -- Arrêter le programme
    

Puis cliquez sur le bouton "Load" pour charger le programme en mémoire etexécutez le programme.
Quelle est la valeur en sortie ?

Génération 2: La programmation en langage assembleur

La génération 2 de l'ordinateur sur 4 bits comprend des logiciels additionels avec le langage assembleur. Les langages assembleurs ont été les premières contributions pour améliorer le niveau d'abstraction dans l'écriture et la mise au point (deboggage) des programmes. Ce n'est peut être pas un pas de géant par rapport au langage machine, mais ça permet de masquer une partie de la complexité, dont la nécessité de se rappeler le code binaire des instructions, des adresses en mémoire et des valeurs.

La vidéo suivante vous montre comment ça marche.

Auto-contrôle

Ci-dessous un tableau de stermes techniques introduits dans cette leçon. PAssez la souris au dessus pour vérifier la définition.
RAM
CPU
ALU
langage machine
cycle fecth-execute
registre d'instruction
compteur d'instruction
accumulateur
langage assembleur
Not yet started
1 point

Quelle est la sortie ?

Comme vous l'avez vu dans la vidéo, l'ordinateur sur 4 bits de Génération 2 vous permet d'utiliser le langage asssembleur pour porgrammer la machine. Voici un exemple :

  VAR A 10
  VAR B 0
  LDA A
  MUL A
  STA B
  PRN B
  NOP
  

Tapez ce programme dasnl'éditeur, assemblez le et exécutez. Qu'obtenez vous en sortie ?

Not yet started
1 point

Quelle est la moyenne ?

Avec l'ordinateur sur 4 bits de Génération 2, écrivez un programme en langage assembleur qui calcule la moyenne des nombres binaires 00000101 et 00001000, puis qui imprime le résultat. Puis chargez le programme en mémoire RAM etexécutez le.

Quelle valeur le programme fournit-il en sortie ?

Etes-vous étonnés par le résultat ?

En savoir plus ?

Voici des exercices complémentaires avec le langage assembleur :

  • Ecrivez un programme en assembleur qui calcule le carré de n'importe quel nombre x : f(x) = x2.
    Indice : Vous aurez besoin d'utiliser l'instruction ou l'opération INP pour entrer la valeur de x. Une fois que votre programme marche, utilisez le pour vous aider à répondre à cette question : Sachant que l'ordinateur sur 4 bits ne peut représenter que des nombres compris entre 0 et 255, quelle est la plus grande valeur de x pour laquelle votre programme va marcher ?
  • Ecrivez un programme en assembleur qui calcule la valeur de la fonction f(a,b) = a2 + b.
    Indice: Soyez économes. Ce programme tient à peine dans la mémoire de notre ordinateur sur 4 bits.

Pour votre portfolio

Créez une page nommée : Abstraction dans la catégorie "Réflexions " de votre portfolio, puis répondez aux questions suivantes :

  1. Quelle génération des simulateurs d'ordinateur sur 4 bits, dispose du niveau d'abstraction le plus élevé ? Pourquoi ?
  2. Expliquez l'objectif et la fonction de la mémoire vive (RAM) et de l'unité centrale (CPU).
  3. Décrivez,avec des termes qui vous appartiennent, la différence entre la commande 'fetch' et la commande 'execute'.
  4. Résumez les différences entre la programmation en assembleur et la programmation en langage machine.